//package com.jgy.spring.bean.beanfactory;
//
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
//import org.springframework.beans.factory.config.BeanPostProcessor;
//import org.springframework.beans.factory.support.AbstractBeanDefinition;
//import org.springframework.beans.factory.support.BeanDefinitionBuilder;
//import org.springframework.beans.factory.support.DefaultListableBeanFactory;
//import org.springframework.context.annotation.AnnotationConfigUtils;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
///**
// * @author 姜光远
// * @date 2023/3/21 21:15
// */
//public class TestBeanFactory {
//    public static void main(String[] args) {
//        DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
//
//        AbstractBeanDefinition singleton =
//                BeanDefinitionBuilder.genericBeanDefinition(Config.class).setScope("singleton").getBeanDefinition();
//        beanFactory.registerBeanDefinition("config",singleton);
//
//        //给beanfactory添加一些后置处理
//        AnnotationConfigUtils.registerAnnotationConfigProcessors(beanFactory);
//
//        //补充bean的定义 可以识别@Bean注解下的bean
//        beanFactory.getBeansOfType(BeanFactoryPostProcessor.class).values().forEach(beanFactoryPostProcessor -> {
//            beanFactoryPostProcessor.postProcessBeanFactory(beanFactory);
//        });
//
//        //bean后处理器 识别@Autowired和@Resource 等注解
//        beanFactory.getBeansOfType(BeanPostProcessor.class).values().forEach(beanFactory::addBeanPostProcessor);
//
//        for (String name : beanFactory.getBeanDefinitionNames()) {
//            System.out.println(name);
//        }
//        //beanFactory.getBean(Config.class).bean2();
//        //beanFactory.getBean(Bean1.class).getBean2();
//
//    }
//
//    @Configuration
//    static class Config{
//        @Bean
//        public Bean1 bean1(){
//            return new Bean1();
//        }
//        @Bean
//        public Bean2 bean2(){
//            return new Bean2();
//        }
//    }
//
//    static class Bean1{
//
//        public Bean1() {
//            System.out.println("Bean1被创建");
//        }
//        @Autowired
//        private Bean2 bean2;
//
//        public Bean2 getBean2(){
//            return bean2;
//        }
//    }
//
//    static class Bean2{
//        public Bean2(){
//            System.out.println("Bean2被创建");
//        }
//
//        @Autowired
//        private Bean1 bean1;
//
//        public Bean1 getBean1(){
//            return bean1;
//        }
//
//    }
//}
